﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using PMServiceDesk.BusinessLogic;
using PMServiceDesk.DataType;
using PMServiceDesk.Utils.Interfaz;
using PMServiceDesk.Parameters.Constantes;

namespace PMServiceDesk.Web.AppCode
{
    public class CalendarioView
    {
        public CalendarioType Calendario { get; set; }
        public bool NuevoRegistro { get; set; }
        public List<CalendarioType> Calendarios { get; set; }
        public int TotalRegistros { get; set; }
        public FeriadoView FeriadoVista { get; set; }
        public DiaCalendarioView DiaCalendarioVista { get; set; }
    }

    public static class CalendarioIU
    {
        public static CalendarioView Listar(CalendarioType registroBusqueda, int paginaActual, int cantidadMostrar, string orderBy)
        {
            CalendarioLogic logic = new CalendarioLogic();

            CalendarioView view = new CalendarioView();

            registroBusqueda.ProyectoId = Sesion.Usuario.ProyectoId;

            view.Calendarios = logic.CargarExploradorPaginado(registroBusqueda, paginaActual, cantidadMostrar, orderBy);
            view.TotalRegistros = view.Calendarios.Capacity;

            return view;
        }

        public static string ExportarExcel(CalendarioType registroBusqueda, List<GridJSONField> gridFields)
        {
            CalendarioLogic logic = new CalendarioLogic();

            registroBusqueda.ProyectoId = Sesion.Usuario.ProyectoId;

            List<CalendarioType> l = logic.CargarExploradorPaginado(registroBusqueda);

            return InterfazUtils.FileTableHTMLGridJSON(l, gridFields, ArchivoConfig.FileServer, Sesion.Usuario.Usuario, "Calendarios", ExtensionesArchivos.Excel2003);
        }

        public static CalendarioView CargarCalendario(string calendarioId)
        {
            CalendarioLogic logic = new CalendarioLogic();

            CalendarioView view = new CalendarioView();
            view.Calendario = logic.CargarPorId(calendarioId);

            view.FeriadoVista = FeriadoIU.Listar(new FeriadoType { CalendarioId = calendarioId,Fecha="",Descripcion="" }, 1, 10, "Fecha Asc");
            view.DiaCalendarioVista = DiaCalendarioIU.Listar(calendarioId);

            return view;
        }

        public static CalendarioView Grabar(CalendarioType registro)
        {
            CalendarioLogic logic = new CalendarioLogic();

            registro.ProyectoId = Sesion.Usuario.ProyectoId;

            bool nuevoRegistro = (registro.Id == "0");

            logic.GrabarCalendario(registro);

            CalendarioView view = new CalendarioView();
            view.Calendario = registro;
            view.NuevoRegistro = nuevoRegistro;

            return view;
        }
    }

    public class FeriadoView
    {
        public List<FeriadoType> Feriados { get; set; }
        public int TotalRegistros { get; set; }
        public FeriadoType Feriado { get; set; }
        public bool NuevoRegistro { get; set; }
    }

    public class FeriadoIU
    {
        public static FeriadoView Listar(FeriadoType registroBusqueda, int paginaActual, int cantidadMostrar, string orderBy)
        {
            FeriadoLogic logic = new FeriadoLogic();

            FeriadoView view = new FeriadoView();

            view.Feriados = logic.CargarExploradorPaginado(registroBusqueda, paginaActual, cantidadMostrar, orderBy);
            view.TotalRegistros = view.Feriados.Capacity;

            return view;
        }

        public static FeriadoType Cargar(string id)
        {
            FeriadoType f = new FeriadoType();

            if (id == null) return f;

            FeriadoLogic logic = new FeriadoLogic();

            f = logic.CargarPorId(id);

            return f;
        }

        public static FeriadoView Grabar(FeriadoType registro)
        {
            FeriadoView view = new FeriadoView();
            view.NuevoRegistro = (registro.Id == "0");

            FeriadoLogic logic = new FeriadoLogic();
            logic.Grabar(registro);

            view.Feriado = registro;

            return view;
        }

        public static string ExportarExcel(FeriadoType registroBusqueda, List<GridJSONField> gridFields)
        {
            FeriadoLogic logic = new FeriadoLogic();

            List<FeriadoType> l = logic.CargarExploradorPaginado(registroBusqueda,0,0,"FECHA ASC");

            return InterfazUtils.FileTableHTMLGridJSON(l, gridFields, ArchivoConfig.FileServer, Sesion.Usuario.Usuario, "Feriados", ExtensionesArchivos.Excel2003);
        }
    }

    public class DiaCalendarioView
    {
        public List<DiaCalendarioType> DiasCalendario { get; set; }
        public int TotalRegistros { get; set; }
        public DiaCalendarioType DiaCalendario { get; set; }
        public bool NuevoRegistro { get; set; }
    }

    public class DiaCalendarioIU
    {
        public static DiaCalendarioView Listar(string calendarioId)
        {
            DiaCalendarioLogic logic = new DiaCalendarioLogic();

            DiaCalendarioView view = new DiaCalendarioView();

            view.DiasCalendario = logic.CargarExplorador(calendarioId);

            return view;
        }

        public static DiaCalendarioType Cargar(string id)
        {
            DiaCalendarioType f = new DiaCalendarioType();

            if (id == null) return f;

            DiaCalendarioLogic logic = new DiaCalendarioLogic();

            f = logic.CargarPorId(id);

            return f;
        }

        public static DiaCalendarioView Grabar(DiaCalendarioType registro)
        {
            DiaCalendarioView view = new DiaCalendarioView();
            view.NuevoRegistro = (registro.Id == "0");

            DiaCalendarioLogic logic = new DiaCalendarioLogic();
            logic.Grabar(registro);

            view.DiaCalendario = registro;

            return view;
        }

        public static string ExportarExcel(string calendarioId, List<GridJSONField> gridFields)
        {
            DiaCalendarioLogic logic = new DiaCalendarioLogic();

            List<DiaCalendarioType> l = logic.CargarExplorador(calendarioId);

            return InterfazUtils.FileTableHTMLGridJSON(l, gridFields, ArchivoConfig.FileServer, Sesion.Usuario.Usuario, "DiasCalendario", ExtensionesArchivos.Excel2003);
        }
    }

    public class DiaHorarioView
    {
        public List<DiaHorarioType> DiasHorario { get; set; }
        public DiaHorarioType DiaHorario { get; set; }
        public bool NuevoRegistro { get; set; }
    }

    public class DiaHorarioIU
    {
        public static DiaHorarioView Listar(string diaCalendarioId)
        {
            DiaHorarioLogic logic = new DiaHorarioLogic();

            DiaHorarioView view = new DiaHorarioView();

            view.DiasHorario = logic.CargarExplorador(diaCalendarioId);

            return view;
        }

        public static DiaHorarioType Cargar(string id)
        {
            DiaHorarioType f = new DiaHorarioType();

            if (id == null) return f;

            DiaHorarioLogic logic = new DiaHorarioLogic();

            f = logic.CargarPorId(id);

            return f;
        }

        public static DiaHorarioView Grabar(DiaHorarioType registro)
        {
            DiaHorarioView view = new DiaHorarioView();
            view.NuevoRegistro = (registro.Id == "0");

            DiaHorarioLogic logic = new DiaHorarioLogic();
            logic.Grabar(registro);

            view.DiaHorario = registro;

            return view;
        }

        public static void Eliminar(string id)
        {
            DiaHorarioLogic logic = new DiaHorarioLogic();
            logic.Eliminar(id);
        }

        public static string ExportarExcel(string diaCalendarioId, List<GridJSONField> gridFields)
        {
            DiaHorarioLogic logic = new DiaHorarioLogic();

            List<DiaHorarioType> l = logic.CargarExplorador(diaCalendarioId);

            return InterfazUtils.FileTableHTMLGridJSON(l, gridFields, ArchivoConfig.FileServer, Sesion.Usuario.Usuario, "Horarios", ExtensionesArchivos.Excel2003);
        }
    }

}